//给你两个二进制字符串 a 和 b ，以二进制字符串的形式返回它们的和。
//
//
//
// 示例 1：
//
//
//输入:a = "11", b = "1"
//输出："100"
//
// 示例 2：
//
//
//输入：a = "1010", b = "1011"
//输出："10101"
//
//
//
// 提示：
//
//
// 1 <= a.length, b.length <= 10⁴
// a 和 b 仅由字符 '0' 或 '1' 组成
// 字符串如果不是 "0" ，就不含前导零
//
//
// Related Topics 位运算 数学 字符串 模拟 👍 1049 👎 0

package main

import (
	"bytes"
	"strconv"
)

// 力扣代码
// leetcode submit region begin(Prohibit modification and deletion)
func addBinary(a string, b string) string {
	bf := bytes.Buffer{}
	i, j := len(a)-1, len(b)-1
	t := 0
	for i >= 0 || j >= 0 || t != 0 {
		if i >= 0 {
			t, _ := strconv.Atoi(a[i])
		}
		if j >= 0 {
			t += int(b[j])
		}
		bf.WriteString(string(t % 2))
		t = t / 2
	}
	return reverseString(bf.String())
}

func reverseString(s string) string {
	b := []byte(s)
	for i := 0; i < len(b)/2; i++ {
		j := len(b) - i - 1
		b[i], b[j] = b[j], b[i]
	}
	return string(b)
}

//leetcode submit region end(Prohibit modification and deletion)

func main() {
	addBinary("11", "1")
}
